home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / rabbit / rabbit.bas next >
BASIC Source File  |  1994-06-01  |  17KB  |  403 lines

  1. 1000 '12ドットフォントエディタ for TownsOS
  2. 1010 'DS-MoonRabbit Version 1.00a
  3. 1020 'Copyright (c) 1994 Delmonta all rights reserved.
  4. 1030 '
  5. 1040 'メモリなどの基本的な初期化
  6. 1050    CLEAR ,,,120000,0,0
  7. 1060    DEFLNG A-Z              'TOWNSだからすべてlongとして差し支えないだろう
  8. 1070    ON ERROR GOTO *ERRTRAP
  9. 1080    DIM FONTDATA&(&H1B000/4)                       '編集するフォントデータ
  10. 1090    DIM BUTTON(10,3)                                 'ボタンアイテムの座標
  11. 1100    DEF FNBADJIS(H,L) = (H<&H21 OR H>&H20+47 OR L<&H21 OR L>&H7E)
  12. 1110                                        '↑JISコードの範囲外かどうか調べる
  13. 1130 'コンソールを使用してタイトルを表示
  14. 1140    COLOR 7,0,,4:CLS:CONSOLE 0,24,2        'コンソール画面の最小限の初期化
  15. 1150    ISCONSOLE = 1
  16. 1160    PRINT "12ドットフォントエディタ for TownsOS"
  17. 1170    PRINT "DS-MoonRabbit Version 1.00a"
  18. 1180    PRINT "Copyright (c) 1994 Delmonta all rights reserved."
  19. 1190    PRINT
  20. 1200    FILENAME$=""
  21. 1210    LINE INPUT "編集するファイル名:",FILENAME$
  22. 1220    IF FILENAME$="" THEN FILENAME$="\sysinit\system.fnt"
  23. 1230    ERRCODE = 0
  24. 1240    LOAD@ FILENAME$,FONTDATA&
  25. 1250    IF ERRCODE=-1 THEN 1230 ELSE IF ERRCODE THEN 1200
  26. 1260 '画面初期化
  27. 1270    ISCONSOLE = 0
  28. 1280    SCREEN @0:SCREEN 0
  29. 1290    VIEW (0,0)-(1023,511) : WINDOW (0,0)-(1023,511)
  30. 1300    RESTORE *SCRINI_PALETTETABLE:FOR I=0 TO 15             'パレット初期化
  31. 1310       *SCRINI_PALETTETABLE
  32. 1320          DATA  0, 0, 0,   0, 0, 8,   0, 8, 0,   0, 8, 8
  33. 1330          DATA  8, 0, 0,   8, 0, 8,   8, 8, 0,  11,11,11
  34. 1340          DATA  4, 4, 4,   4, 4,15,   4,15, 4,   4,15,15 
  35. 1350          DATA 15, 4, 4,  15, 0,15,  15,15, 4,  15,15,15
  36. 1360       READ G,R,B:PALETTE I,[G*17,R*17,B*17]
  37. 1370    NEXT I
  38. 1380    CONSOLE 0,24,2
  39. 1390    COLOR ,%9:CLS
  40. 1400    MOUSE 0
  41. 1410    MOUSE 4,0,0,639,479
  42. 1420    MOUSE 1,320,240,1
  43. 1430 '画面描画
  44. 1440    'ボタンアイテム
  45. 1450       LINE (608,1)-(638,31),PSET,%7,BF
  46. 1460       SYMBOL (616,8),"×",1,1,%0             'ボタンアイテム#0 - MoonRabbit終了
  47. 1470          BUTTON(0,0) = 608 : BUTTON(0,1) =  1
  48. 1480          BUTTON(0,2) = 638 : BUTTON(0,3) = 31
  49. 1490       COLOR ,%7
  50. 1500       SYMBOL (336,96),"↑",1,1,%0,0,OPAQUE       'ボタンアイテム#1 - 前の部分へ
  51. 1510          BUTTON(1,0) = 335 : BUTTON(1,1) =  95
  52. 1520          BUTTON(1,2) = 352 : BUTTON(1,3) = 112
  53. 1530          LINE (335,95)-(352,112),PSET,%7,B
  54. 1540       SYMBOL (336,336),"↓",1,1,%0,0,OPAQUE      'ボタンアイテム#2 - 次の部分へ
  55. 1550          BUTTON(2,0) = 335 : BUTTON(2,1) = 335
  56. 1560          BUTTON(2,2) = 352 : BUTTON(2,3) = 352
  57. 1570          LINE (335,335)-(352,352),PSET,%7,B
  58. 1580       SYMBOL (64,32),"保存(S)",1,1,%0,0,OPAQUE   'ボタンアイテム#3 - データの保存
  59. 1590          BUTTON(3,0) =  63 : BUTTON(3,1) =  31
  60. 1600          BUTTON(3,2) = 120 : BUTTON(3,3) =  48
  61. 1610          LINE (63,31)-(120,48),PSET,%7,B
  62. 1620       SYMBOL (136,32),"再編集(L)",1,1,%0,0,OPAQUE    'ボタンアイテム#4 - 再編集
  63. 1630          BUTTON(4,0) = 135 : BUTTON(4,1) =  31
  64. 1640          BUTTON(4,2) = 208 : BUTTON(4,3) =  48
  65. 1650          LINE (135,31)-(208,48),PSET,%7,B
  66. 1660       SYMBOL (536,336),"文字指定(C)",1,1,%0,0,OPAQUE 'ボタンアイテム#5-文字指定
  67. 1670          BUTTON(5,0) = 535 : BUTTON(5,1) = 335
  68. 1680          BUTTON(5,2) = 624 : BUTTON(5,3) = 352
  69. 1690          LINE (535,335)-(624,352),PSET,%7,B
  70. 1700       BUTTON_NUM = 6                           'ボタンアイテムは全部で6個
  71. 1710       FOR I=0 TO BUTTON_NUM-1                   'ボタンアイテムの枠を表示
  72. 1720          STARTX = BUTTON(I,0)
  73. 1730          STARTY = BUTTON(I,1)
  74. 1740          ENDX   = BUTTON(I,2)
  75. 1750          ENDY   = BUTTON(I,3)
  76. 1760          GOSUB *PULLBUTTON
  77. 1770       NEXT
  78. 1780    '一覧表
  79. 1790       LINE (64,96)-(320,352),PSET,%0,BF
  80. 1800       LINE (64,96)-(320,352),PSET,%1,B
  81. 1810       SYMBOL (68,80),"0 1 2 3 4 5 6 7 8 9 A B C D E F",1,1,%1
  82. 1820       PAGENUM = 0 : GOSUB *PUTPAGE
  83. 1830    '方眼
  84. 1840       LINE (384-1,112-1)-STEP(12*16+1,12*16+1),PSET,%0,B
  85. 1850       EDITCHAR = &H41 : GOSUB *PUTCHAR_LARGE
  86. 1860 'メインルーチン
  87. 1870 *MAIN
  88. 1880    WHILE MOUSE(2,0)=-1 : WEND '既に左ボタンが押されていたら離されるまで待つ
  89. 1890    A$="" : WHILE MOUSE(2,0)=0 AND A$="" : A$=INKEY$ : WEND
  90. 1900    IF A$="" THEN *MAIN_ENDKB
  91. 1910       ON INSTR(" SsLlCc",A$)\2 GOSUB *DISKSAVE,*DISKLOAD,*SETCODE
  92. 1920       WHILE INKEY$<>"" : WEND
  93. 1930       GOTO *MAIN
  94. 1940    *MAIN_ENDKB
  95. 1950    X = MOUSE(0)
  96. 1960    Y = MOUSE(1)
  97. 1970    FOR I=0 TO BUTTON_NUM-1
  98. 1980       IF BUTTON(I,0)<=X AND X<=BUTTON(I,2) AND BUTTON(I,1)<=Y AND Y<=BUTTON(I,3) THEN
  99. 1990          STARTX = BUTTON(I,0)
  100. 2000          STARTY = BUTTON(I,1)
  101. 2010          ENDX   = BUTTON(I,2)
  102. 2020          ENDY   = BUTTON(I,3)
  103. 2030          GOSUB *CHKBUTTON
  104. 2040          IF RETFLAG THEN ON I+1 GOSUB *EXIT,*PREVPAGE,*NEXTPAGE,*DISKSAVE,*DISKLOAD,*SETCODE
  105. 2050          I = BUTTON_NUM                            'forループから抜け出す
  106. 2060        ENDIF
  107. 2070    NEXT
  108. 2080    IF I=BUTTON_NUM+1 THEN *MAIN     'ボタンアイテムが処理された場合はここで終了
  109. 2090           '↑NEXT文で常にI++される。ボタンアイテムでなければこのときI=BUTTON_NUM
  110. 2100    IF 64<X AND X<320 AND 96<Y AND Y<352 THEN GOSUB *DRAG : GOTO *MAIN
  111. 2110                    '↑一覧表からのドラッグ ↓エディット画面からのドラッグ
  112. 2120    IF 432<X AND X<448 AND 80<Y AND Y<96 THEN GOSUB *DRAG : GOTO *MAIN
  113. 2130    IF 384<=X AND X<576 AND 112<=Y AND Y<304 THEN GOSUB *EDIT : GOTO *MAIN
  114. 2140 GOTO *MAIN
  115. 2150 'ドットパターンの編集
  116. 2160 *EDIT
  117. 2170    X = (X-384)\16 : Y = (Y-112)\16
  118. 2180    IF EDITCHAR<&H100 AND X>=6 THEN RETURN                '半角は横6ドット
  119. 2190    LINE (384+X*16,112+Y*16)-STEP(15,15),XOR,%(15 XOR 1),BF
  120. 2200    PSET (434+X,82+Y),%(15 XOR 1),XOR
  121. 2210 RETURN
  122. 2220 'ドラッグ&ドロップ
  123. 2230 *DRAG
  124. 2240    DIM DRAG_DOTPATN&(127),DRAG_ANDPATN&(31)
  125. 2250    '文字パターンを作業領域に移す
  126. 2260       IF X<320 THEN                                 '一覧表からのドラッグ
  127. 2270          X = (X-64)\16
  128. 2280          Y = (Y-96)\16
  129. 2290          CHAR = Y*16 + X + PAGENUM*256
  130. 2300          IF PAGENUM>0 AND Y>=8 THEN CHAR = CHAR+128
  131. 2310          X = X*16 + 64 + 2
  132. 2320          Y = Y*16 + 96 + 2
  133. 2330       ELSE                            '方眼の上の原寸表示部からのドラッグ
  134. 2340          X    = 434
  135. 2350          Y    =  82
  136. 2360          CHAR =  -1
  137. 2370       ENDIF
  138. 2380       GET@A (X,Y)-(X+11,Y+11),DRAG_DOTPATN&
  139. 2390       LINE  (640,0)-(671,31),PSET,%0,BF
  140. 2400       PUT@A (640,0)-(651,11),DRAG_DOTPATN&
  141. 2410    'マウスカーソルのパターンを変更する
  142. 2420       GET@A (640,0)-(671,31),DRAG_DOTPATN&
  143. 2430       GET@  (640,0)-(671,31),DRAG_ANDPATN&,%0
  144. 2440       MOUSE 1,,,0
  145. 2450       IF CHAR>=256 OR (CHAR=-1 AND EDITCHAR>=256) THEN X=6 ELSE X=3 
  146. 2460       MOUSE 6,1,DRAG_ANDPATN&,DRAG_DOTPATN&,X,6
  147. 2470       MOUSE 1,,,1
  148. 2480    'ボタンが離されるまで待つ
  149. 2490       WHILE MOUSE(2,0) : WEND
  150. 2500    'マウスカーソルを元に戻す
  151. 2510       X = MOUSE(0)
  152. 2520       Y = MOUSE(1)
  153. 2530       MOUSE 0
  154. 2540       MOUSE 4,0,0,639,479
  155. 2550       MOUSE 1,X,Y,1
  156. 2560    '文字パターンのコピー
  157. 2570       IF 384<X AND X<576 AND 112<Y AND Y<304 THEN       '方眼へのドラッグ
  158. 2580          IF CHAR>=0 THEN EDITCHAR = CHAR : GOSUB *PUTCHAR_LARGE
  159. 2590       ELSE IF 64<X AND X<320 AND 96<Y AND Y<352 THEN  '一覧表へのドラッグ
  160. 2600          CHAR = (X-64)\16 + (Y-96 AND -16)
  161. 2610          IF CHAR>=128 AND PAGENUM>0 THEN CHAR = CHAR+128
  162. 2620          CHAR = CHAR + PAGENUM*256
  163. 2630          IF PAGENUM>0 AND FNBADJIS(CHAR\256,CHAR AND 255) THEN
  164. 2640                                     '一覧表中の空欄にドラッグしようとした
  165. 2650          ELSE IF PAGENUM THEN                           'ドラッグ先は全角
  166. 2660             GET@ (640,0)-(651,11),DRAG_ANDPATN&,%15
  167. 2670             A = ((CHAR\256 - &H21)*94 + (CHAR MOD 256 - &H21))*6 + &H300
  168. 2680             FOR I=0 TO 5
  169. 2690                FONTDATA&(A+I) = DRAG_ANDPATN&(I)
  170. 2700             NEXT
  171. 2710          ELSE                                           'ドラッグ先は半角
  172. 2720             GET@ (640,0)-(645,11),DRAG_ANDPATN&,%15
  173. 2730             FOR I=0 TO 2
  174. 2740                FONTDATA&(CHAR*3+I) = DRAG_ANDPATN&(I)
  175. 2750             NEXT
  176. 2760          ENDIF
  177. 2770          STARTX = (X AND -16) + 2
  178. 2780          STARTY = (Y AND -16) + 2
  179. 2790          GOSUB *PUTCHAR
  180. 2800       ENDIF
  181. 2810    ERASE DRAG_DOTPATN&,DRAG_ANDPATN&
  182. 2820 RETURN
  183. 2830 '終了
  184. 2840 *EXIT
  185. 2850    END
  186. 2860 '前のページへ
  187. 2870 *PREVPAGE
  188. 2880    IF PAGENUM=0 THEN RETURN         'すでに半角が表示されていたらそのまま
  189. 2890    PAGENUM = PAGENUM-2
  190. 2900    IF PAGENUM<&H21 THEN PAGENUM=0
  191. 2910    GOSUB *PUTPAGE
  192. 2920 RETURN
  193. 2930 '次のページへ
  194. 2940 *NEXTPAGE
  195. 2950   IF PAGENUM=&H21+46 THEN RETURN       '46/47区が表示されていたらそのまま
  196. 2960   IF PAGENUM=0 THEN PAGENUM = &H21 ELSE PAGENUM = PAGENUM+2
  197. 2970   GOSUB *PUTPAGE
  198. 2980 RETURN
  199. 2990 'ディスクにデータを書き込む
  200. 3000 *DISKSAVE
  201. 3010    ERRCODE = -2                                   'KILL文でのエラーは無視
  202. 3020    KILL FILENAME$
  203. 3030    ERRCODE = 0
  204. 3035    SAVE@ FILENAME$,FONTDATA&
  205. 3040    IF ERRCODE=-1 THEN GOTO *DISKSAVE
  206. 3050 RETURN
  207. 3060 'ディスクからデータを読み込む
  208. 3070 *DISKLOAD
  209. 3080    ERRCODE = 0
  210. 3090    LOAD@ FILENAME$,FONTDATA&
  211. 3100    IF ERRCODE=-1 THEN GOTO *DISKLOAD
  212. 3110    IF ERRCODE=0 THEN GOSUB *PUTPAGE
  213. 3120 RETURN
  214. 3130 '編集する文字の指定
  215. 3140 *SETCODE
  216. 3150    CONSOLE 19,1,2
  217. 3160    COLOR 7,,,4            'コンソールの文字の色はパレットでは指定できない
  218. 3170    *SETCODE_REP
  219. 3180       LOCATE 0,19
  220. 3190       A$="" : LINE INPUT "編集する文字/JISコード:",A$
  221. 3200       PRINT
  222. 3210       IF A$="" THEN GOTO *SETCODE_END          'リターンキー空打ち - 中止
  223. 3220       IF KLEN(A$)>1 AND KLEN(A$,2)=0 THEN CHAR=VAL("&H"+A$) ELSE CHAR=JIS(A$)
  224. 3230       IF CHAR>=256 AND FNBADJIS(CHAR\256,CHAR MOD 256) THEN *SETCODE_REP
  225. 3240       EDITCHAR = CHAR : GOSUB *PUTCHAR_LARGE
  226. 3250    *SETCODE_END
  227. 3260    CONSOLE 0,24,2
  228. 3270 RETURN
  229. 3280 '一覧表を再表示する
  230. 3290 '<in>    PAGENUM         : ページ番号(表示する文字のJISコード上位8ビット)
  231. 3300 '<out>   なし
  232. 3310 '<break> STARTX,STARTY,CHAR,[TMPX,TMPY]
  233. 3320 *PUTPAGE
  234. 3330    CHAR = PAGENUM*256
  235. 3340    FOR STARTY=98 TO 98+15*16 STEP 16
  236. 3350       COLOR ,%9
  237. 3360       SYMBOL (32,STARTY-2),RIGHT$("000"+HEX$(CHAR),4),1,1,%1,0,OPAQUE
  238. 3370       FOR STARTX=66 TO 66+15*16 STEP 16
  239. 3380          GOSUB *PUTCHAR
  240. 3390          CHAR = CHAR+1
  241. 3400          IF PAGENUM>0 AND (CHAR AND 128) THEN CHAR = CHAR+128
  242. 3410       NEXT
  243. 3420    NEXT
  244. 3430 RETURN
  245. 3440 '方眼に文字を表示する
  246. 3450 '<in>    EDITCHAR : 文字のASCIIコード/JIS漢字コード
  247. 3460 '<out>   
  248. 3470 '<break> STARTX,STARTY,CHAR,[TMPX,TMPY]
  249. 3480 *PUTCHAR_LARGE
  250. 3490    STARTX=434 : STARTY=82 : CHAR=EDITCHAR : GOSUB *PUTCHAR
  251. 3500    DIM PUTC_L_BUF&(23)                    '原寸表示から方眼部へ拡大コピー
  252. 3510       GET@A (434,82)-(434+11,82+11),PUTC_L_BUF&
  253. 3520       PUT@A (384,112)-(384+11,112+11),PUTC_L_BUF&,PSET,16,16
  254. 3530    ERASE PUTC_L_BUF&
  255. 3540    FOR STARTY=0 TO 11                 '方眼の各ドットの右下を色違いにする
  256. 3550       FOR STARTX=0 TO 11
  257. 3560          PSET (384+STARTX*16+15,112+STARTY*16+15),%(15 XOR 1),XOR
  258. 3570       NEXT
  259. 3580    NEXT
  260. 3590    COLOR ,%9
  261. 3600    SYMBOL (384,80),RIGHT$("000"+HEX$(EDITCHAR),4),1,1,%1,0,OPAQUE
  262. 3610    EDITCHAR = CHAR
  263. 3620 RETURN
  264. 3630 '12ドットの文字を表示する
  265. 3640 '<in>    STARTX,STARTY : 表示する位置
  266. 3650 '        CHAR          : 表示する文字のASCIIコード/JIS漢字コード
  267. 3660 '<out>   -
  268. 3670 '<break> TMPX,TMPY
  269. 3680 *PUTCHAR
  270. 3690    DIM PUTC_BUF&(5)
  271. 3700    IF CHAR<&H100 THEN
  272. 3710       FOR TMPX=0 TO 2
  273. 3720          PUTC_BUF&(TMPX) = FONTDATA&(CHAR*3 + TMPX)
  274. 3730       NEXT
  275. 3740       COLOR ,%1
  276. 3750       PUT@ (STARTX,STARTY)-(STARTX+5,STARTY+11),PUTC_BUF&,OPAQUE,%15
  277. 3760       LINE (STARTX+6,STARTY)-(STARTX+11,STARTY+11),PSET,%0,BF
  278. 3770    ELSE
  279. 3780       TMPX= CHAR\256
  280. 3790       TMPY = CHAR MOD 256
  281. 3800       IF FNBADJIS(TMPX,TMPY) THEN
  282. 3810          LINE (STARTX,STARTY)-(STARTX+11,STARTY+11),PSET,%0,BF
  283. 3820       ELSE
  284. 3830          TMPY = ((TMPX-&H21)*94 + TMPY-&H21)*6 + 3*256
  285. 3840          FOR TMPX=0 TO 5
  286. 3850             PUTC_BUF&(TMPX) = FONTDATA&(TMPY+TMPX)
  287. 3860          NEXT
  288. 3870          COLOR ,%1
  289. 3880          PUT@ (STARTX,STARTY)-(STARTX+11,STARTY+11),PUTC_BUF&,OPAQUE,%15
  290. 3890       ENDIF
  291. 3900    ENDIF
  292. 3910    ERASE PUTC_BUF&
  293. 3920 RETURN
  294. 3930 '画面上のボタンアイテムが左クリックされたときに呼び出すルーチン
  295. 3940 '<in>    STARTX,STARTY,ENDX,ENDY    :ボタンアイテムの位置(常に始点<終点)
  296. 3950 '<out>   RETFLAG                    :1ならクリックとする、0ならキャンセル
  297. 3960 '<break> TMPX,TMPY
  298. 3970 *CHKBUTTON
  299. 3980    GOSUB *PUSHBUTTON
  300. 3990    WHILE MOUSE(2,0):WEND                  'マウスボタンが放されるまで待つ
  301. 4000    TMPX=MOUSE(0) : TMPY=MOUSE(1)
  302. 4010    IF STARTX<=TMPX AND TMPX<=ENDX AND STARTY<=TMPY AND TMPY<=ENDY THEN RETFLAG=1 ELSE RETFLAG=0
  303. 4020    GOSUB *PULLBUTTON
  304. 4030 RETURN
  305. 4040 '画面上のボタンアイテムをへこませる
  306. 4050 '<in>          STARTX,STARTY,ENDX,ENDY  :ボタンアイテムの位置
  307. 4060 '<out> <break> -
  308. 4070 *PUSHBUTTON
  309. 4080    LINE (STARTX-1,STARTY-1)-(ENDX  +1,ENDY+1),PSET,%0,B
  310. 4090    LINE (ENDX  +1,ENDY  +1)-(STARTX-1,ENDY  +1),PSET,%15
  311. 4100    LINE (ENDX  +1,ENDY  +1)-(ENDX  +1,STARTY-1),PSET,%15
  312. 4110 RETURN
  313. 4120 'へこませた画面上のボタンアイテムを元に戻す
  314. 4130 '<in> <out> <break>  *PUSHBUTTONと同じ
  315. 4140 *PULLBUTTON
  316. 4150    LINE (STARTX-1,STARTY-1)-(ENDX  +1,ENDY  +1),PSET,%0,B
  317. 4160    LINE (STARTX-1,STARTY-1)-(STARTX-1,ENDY  +1),PSET,%15
  318. 4170    LINE (STARTX-1,STARTY-1)-(ENDX  +1,STARTY-1),PSET,%15
  319. 4180 RETURN
  320. 4190 'エラー処理ルーチン
  321. 4195 *ERRTRAP
  322. 4200    IF ERRCODE=-2 THEN ERRCODE=0 : RESUME NEXT
  323. 4210    RESTORE *ERRMES_TABLE
  324. 4220    *ERRTRAP_REP
  325. 4230       READ ERRCODE,ERRMES$
  326. 4240       IF ERRCODE=-1 THEN GOTO *ERRTRAP_ENDREP
  327. 4250       IF ERRCODE=ERR THEN GOSUB *DISKERR : RESUME NEXT
  328. 4260    GOTO *ERRTRAP_REP
  329. 4270    *ERRTRAP_ENDREP
  330. 4280    A$ = "システムエラー(" + STR$(ERR) + ") 強制終了します"
  331. 4290    IF ISCONSOLE THEN
  332. 4300       PRINT A$
  333. 4310       PRINT "何かキーを押してください..."
  334. 4320       WHILE INKEY$="" : WEND
  335. 4330    ELSE
  336. 4340       SYMBOL (0,400),A$,1,1,%1,,PSET
  337. 4350       STARTX = 591
  338. 4360       STARTY = 415
  339. 4370       ENDX   = 624
  340. 4380       ENDY   = 432
  341. 4390       COLOR ,%7
  342. 4400       SYMBOL (STARTX-1,STARTY-1),"確認",1,1,%0,,OPAQUE
  343. 4410       LINE (STARTX,STARTY)-(ENDX,ENDY),PSET,%7,B
  344. 4420       GOSUB *PULLBUTTON
  345. 4430       *ERRTRAP_MOUSEREP
  346. 4440          WHILE MOUSE(2,0)   : WEND
  347. 4450          WHILE MOUSE(2,0)=0 : WEND
  348. 4460          X = MOUSE(0)
  349. 4470          Y = MOUSE(1)
  350. 4480          IF X<STARTX OR ENDX<X OR Y<STARTY OR ENDY<Y THEN GOTO *ERRTRAP_ENDREP
  351. 4490          GOSUB *CHKBUTTON
  352. 4500       IF RETFLAG=0 THEN GOTO *ERRTRAP_MOUSEREP
  353. 4510    ENDIF
  354. 4520    END
  355. 4530 *ERRMES_TABLE
  356. 4540    DATA 55,"ファイル名の記述に誤りがあります"
  357. 4550    DATA 60,"指定の入出力装置は使用できません"
  358. 4560    DATA 63,"指定のファイルが見つかりません"
  359. 4570    DATA 65,"ディスクのディレクトリ領域に空きがありません"
  360. 4580    DATA 67,"ディスクに空き領域がありません"
  361. 4590    DATA 72,"指定されたディスク装置が使用可能な状態になっていません"
  362. 4600    DATA 73,"指定されたディスクは書き込みが禁止されています"
  363. 4610    DATA 75,"デバイスまたはファイルのアクセスが拒否されました"
  364. 4620    DATA -1,""
  365. 4630 'ディスクエラー対策
  366. 4640 '<out> ERRCODE      -1:Retry, 0:Ignore, 1-255:Fail
  367. 4650 *DISKERR
  368. 4660    ERRMES$ = "ディスクエラー(" + STR$(ERR) + ") " + ERRMES$
  369. 4670    IF ISCONSOLE THEN
  370. 4680       PRINT ERRMES$
  371. 4690       *DISKERR_CONS_REP
  372. 4700          LINE INPUT "A:中止,R:再試行,I:無視して続行  :",ERRMES$
  373. 4710       IF LEN(ERRMES$)<>1 OR INSTR("AaFfRrIi",ERRMES$)=0 THEN GOTO *DISKERR_CONS_REP
  374. 4720       IF ERRMES$="R" OR ERRMES$="r" THEN ERRCODE=-1
  375. 4730       IF ERRMES$="I" OR ERRMES$="i" THEN ERRCODE=0
  376. 4740    ELSE
  377. 4750       SYMBOL (0,384),ERRMES$,1,1,%1,0,PSET
  378. 4760       STARTY = 415
  379. 4770       ENDY   = 432
  380. 4780       FOR ERR_I=0 TO 2
  381. 4790          STARTX = 447 + ERR_I*64
  382. 4800          ENDX   = STARTX + 49
  383. 4810          LINE (STARTX,STARTY)-(ENDX,ENDY),PSET,%7,BF
  384. 4820          SYMBOL (STARTX+1,STARTY+1),MID$(" 中止 再試行 無視 ",ERR_I*6+1,6),1,1,%0,,PSET
  385. 4830          GOSUB *PULLBUTTON
  386. 4840       NEXT
  387. 4850       *DISKERR_REP
  388. 4860          WHILE MOUSE(2,0)   : WEND
  389. 4870          WHILE MOUSE(2,0)=0 : WEND
  390. 4880          ERR_X = MOUSE(0) - 447
  391. 4890          ERR_Y = MOUSE(1)
  392. 4900          IF ERR_Y<STARTY OR ENDY<ERR_Y THEN GOTO *DISKERR_REP
  393. 4910          IF ERR_X<0 OR 64*3<=ERR_X OR (ERR_X AND 63)>49 THEN GOTO *DISKERR_REP
  394. 4920          ERR_X = ERR_X\64
  395. 4930          STARTX = 447 + ERR_X*64
  396. 4940          ENDX   = STARTX + 49
  397. 4950          GOSUB *CHKBUTTON
  398. 4960       IF RETFLAG=0 THEN GOTO *DISKERR_REP
  399. 4970       LINE (0,384)-(639,433),PSET,%9,BF
  400. 4980       IF ERR_X=1 THEN ERRCODE=-1 ELSE IF ERR_X=2 THEN ERRCODE=0
  401. 4990    ENDIF
  402. 5000 RETURN
  403.